home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / termData.c < prev    next >
C/C++ Source or Header  |  1995-09-26  |  51KB  |  1,731 lines

  1. /*
  2. **    termData.c
  3. **
  4. **    Global data structures.
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. BOOLEAN             DebugFlag;
  13.  
  14.     /* Libraries. */
  15.  
  16. struct ExecBase        *SysBase;
  17. struct DosLibrary    *DOSBase;
  18. struct Library        *GTLayoutBase;
  19.  
  20. struct IntuitionBase    *IntuitionBase;
  21. struct GfxBase        *GfxBase;
  22. struct RxsLib        *RexxSysBase;
  23. struct LocaleBase    *LocaleBase;
  24. struct Library        *GadToolsBase,
  25.             *TimerBase,
  26.             *ConsoleDevice,
  27.             *DiskfontBase,
  28.             *UtilityBase,
  29.             *AslBase,
  30.             *IFFParseBase,
  31.             *CxBase,
  32.             *IconBase,
  33.             *LayersBase,
  34.             *TranslatorBase,
  35.             *WorkbenchBase,
  36.             *AmigaGuideBase,
  37.             *XEmulatorBase,
  38.             *XProtocolBase,
  39.             *DataTypesBase,
  40.             *OwnDevUnitBase;
  41.  
  42. BYTE             Kick30;
  43.  
  44.     /* Timer device. */
  45.  
  46. struct timerequest    *TimeRequest;
  47. struct MsgPort        *TimePort;
  48.  
  49.     /* Console device. */
  50.  
  51. struct IOStdReq        *ConsoleRequest;
  52. struct KeyMap        *KeyMap;
  53. BPTR             KeySegment;
  54.  
  55.     /* Screen & Windows. */
  56.  
  57. struct Screen        *Screen,
  58.             *DefaultPubScreen,
  59.             *SharedScreen;
  60. struct Window        *Window;
  61. LONG             WindowWidth,
  62.              WindowHeight,
  63.              WindowLeft,
  64.              WindowTop;
  65. struct Window        *StatusWindow;
  66. struct Gadget        *StatusGadget;
  67. UWORD             StatusOffset;
  68. struct RastPort         StatusRastPort,
  69.             *StatusRPort;
  70. UWORD             StatusDisplayLeft,
  71.              StatusDisplayTop,
  72.              StatusDisplayWidth,
  73.              StatusDisplayHeight;
  74. APTR             OldWindowPtr;
  75. UBYTE __far         ScreenTitle[80];
  76. UBYTE             DepthMask;
  77. LONG             RenderPens[4],
  78.              MappedPens[2][32],
  79.              SafeTextPen;
  80. struct DrawInfo        *DrawInfo;
  81. LONG             ScreenWidth,
  82.              ScreenHeight;
  83. BYTE             UseMasking;
  84. struct IBox         WindowBox = { -1,-1,-1,-1 };
  85.  
  86. struct BlockMarker    *WindowMarker;
  87. ULONG             ClickSecs,ClickMicros;
  88. BYTE             FirstClick = TRUE,HoldClick = FALSE;
  89. LONG             ClickX,ClickY;
  90.  
  91.     /* Workbench AppWindow support. */
  92.  
  93. struct AppWindow    *WorkbenchWindow;
  94. struct MsgPort        *WorkbenchPort;
  95.  
  96.     /* Graphics rendering. */
  97.  
  98. struct ViewPort        *VPort;
  99. struct RastPort        *RPort;
  100. struct Region        *ClipRegion,
  101.             *OldRegion;
  102. struct TextFont        *GFX,
  103.             *CurrentFont,
  104.             *UserTextFont;
  105. WORD             UserFontHeight,
  106.              UserFontWidth,
  107.              UserFontBase;
  108. UBYTE __far         UserFontName[40];
  109. struct TextFont        *TextFont;
  110. WORD             TextFontHeight,
  111.              TextFontWidth,
  112.              TextFontBase;
  113. struct TTextAttr     TextAttr;
  114. UBYTE __far         TextFontName[40];
  115. struct TTextAttr     UserFont;
  116. struct TagItem         TagDPI[2];
  117. APTR             VisualInfo;
  118. UWORD             FontRightExtend;
  119.  
  120. ULONG            (*  ReadAPen)(struct RastPort *RPort);
  121. ULONG            (*  ReadBPen)(struct RastPort *RPort);
  122. ULONG            (*  ReadDrMd)(struct RastPort *RPort);
  123. ULONG            (*  SetMask)(struct RastPort *RPort,ULONG Mask);
  124.  
  125. UWORD MonoPens[] =
  126. {
  127.     0,1,1,1,1,1,0,0,1,    0,1,1,(UWORD)~0
  128. };
  129.  
  130. UWORD StandardPens[] =
  131. {
  132.     0,1,1,2,1,3,1,0,2,    1,2,1,(UWORD)~0
  133. };
  134.  
  135. UWORD ANSIPens[] =
  136. {
  137.     0,4,7,7,4,6,7,0,6,    0,7,0,(UWORD)~0
  138. };
  139.  
  140. UWORD EGAPens[] =
  141. {
  142.     0,15,15,15,8,7,15,0,7,    0,15,0,(UWORD)~0
  143. };
  144.  
  145. UWORD NewEGAPens[] =
  146. {
  147.     7,0,0,15,0,6,0,7,15,    0,15,0,(UWORD)~0
  148. };
  149.  
  150. UWORD AtomicColours[16] =
  151. {
  152.     0x000,
  153.     0xDDD,
  154.     0x000,
  155.     0x000,
  156.     0x000,
  157.     0x000,
  158.     0x000,
  159.     0x000,
  160.     0x000,
  161.     0x000,
  162.     0x000,
  163.     0x000,
  164.     0x000,
  165.     0x000,
  166.     0x000,
  167.     0x000
  168. };
  169.  
  170. UWORD EGAColours[16] =
  171. {
  172.     0x000,    /* Black. */
  173.     0xA00,    /* Dark red. */
  174.     0x0A0,    /* Dark green. */
  175.     0xA60,    /* Dark yellow (orange). */
  176.     0x00A,    /* Dark blue. */
  177.     0xA0A,    /* Dark magenta.*/
  178.     0x0AA,    /* Dark cyan. */
  179.     0xBBB,    /* Light grey. */
  180.     0x666,    /* Dark grey. */
  181.     0xF00,    /* Red. */
  182.     0x0F0,    /* Green. */
  183.     0xFF0,    /* Yellow. */
  184.     0x00F,    /* Blue. */
  185.     0xF0F,    /* Magenta. */
  186.     0x0FF,    /* Cyan. */
  187.     0xFFF    /* White. */
  188. };
  189.  
  190. UWORD ANSIColours[16] =
  191. {
  192.     0x000,    /* Black. */
  193.     0xF00,    /* Red. */
  194.     0x0F0,    /* Green. */
  195.     0xFF0,    /* Yellow. */
  196.     0x00F,    /* Blue. */
  197.     0xF0F,    /* Magenta. */
  198.     0x0FF,    /* Cyan. */
  199.     0xFFF,    /* White. */
  200.  
  201.     0x000,    /* Black. */
  202.     0xF00,    /* Red. */
  203.     0x0F0,    /* Green. */
  204.     0xFF0,    /* Yellow. */
  205.     0x00F,    /* Blue. */
  206.     0xF0F,    /* Magenta. */
  207.     0x0FF,    /* Cyan. */
  208.     0xFFF    /* White. */
  209. };
  210.  
  211. UWORD             DefaultColours[32],
  212.              BlinkColours[32],
  213.              NormalColours[32],
  214.              StandardColours[32],
  215.              PaletteSize = 16;
  216.  
  217.     /* Line/Column offset tables. */
  218.  
  219. LONG            *OffsetXTable,
  220.             *OffsetYTable;
  221.  
  222.     /* DOS data. */
  223.  
  224. struct Process        *ThisProcess;
  225. struct Process        *StatusProcess;
  226. struct Process        *RexxProcess;
  227. struct MsgPort        *TermRexxPort;
  228. struct WBStartup    *WBenchMsg;
  229. BPTR             WBenchLock;
  230. struct TermPort        *TermPort;
  231. BYTE             CheckBit    = -1,
  232.              OwnDevBit    = -1;
  233. BYTE             InRexx;
  234. WORD             LimitCount    = -1;
  235. UBYTE __far         LimitMacro[MAX_FILENAME_LENGTH];
  236. LONG             CantQuit;
  237.  
  238.     /* Character conversion. */
  239.  
  240. struct InputEvent    *FakeInputEvent;
  241.  
  242.     /* Serial I/O. */
  243.  
  244. struct IOExtSer        *ReadRequest;
  245. struct IOExtSer        *WriteRequest;
  246. struct MsgPort        *ReadPort;
  247. UBYTE            *ReadBuffer,
  248.             *HostReadBuffer;
  249. UBYTE            *SerialMessage;
  250. ULONG             DTERate,
  251.              SerialBufferSize;
  252. BYTE             ProcessIO = TRUE;
  253. BYTE             FirstInvocation;
  254. BYTE             UseRTS_CTS;
  255.  
  256. UBYTE __far         NewDevice[MAX_FILENAME_LENGTH];
  257. LONG             NewUnit;
  258. BYTE             UseNewDevice,
  259.              UseNewUnit;
  260.  
  261. LONG BaudRates[] =
  262. {
  263.     110,    300,    600,    1200,    2400,    4800,    7200,
  264.     9600,    12000,    14400,    19200,    31250,    38400,    57600,
  265.     64000,    76800,    115200,    230400,    345600,    460800,    576000,
  266.     614400,    691200,    806400,    921600
  267. };
  268.  
  269. LONG             NumBaudRates = sizeof(BaudRates) / sizeof(LONG);
  270.  
  271. struct RendezvousSemaphore    RendezvousSemaphore;
  272.  
  273.     /* Localization support. */
  274.  
  275. struct Catalog        *Catalog;
  276. struct Locale        *Locale;
  277.  
  278.     /* Hotkeys. */
  279.  
  280. struct Hotkeys         Hotkeys;
  281.  
  282. struct NewBroker NewTermBroker =
  283. {
  284.     NB_VERSION,
  285.     "term",
  286.     "term © 1990-1994 by Olaf Barthel",
  287.     "Terminal program",
  288.     0,0,0,NULL,0
  289. };
  290.  
  291.     /* Static default fonts. */
  292.  
  293. struct TextAttr DefaultFont =
  294. {
  295.     (UBYTE *)"topaz.font",
  296.     8,
  297.     FS_NORMAL,
  298.     FPF_ROMFONT | FPF_DESIGNED
  299. };
  300.  
  301. struct TextAttr GFXFont =
  302. {
  303.     (UBYTE *)"GFX.font",
  304.     8,
  305.     FS_NORMAL,
  306.     FPF_DISKFONT
  307. };
  308.  
  309.     /* Character lookup tables. */
  310.  
  311. BYTE IsPrintable[256] =
  312. {
  313.     0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,1,
  314.     0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,
  315.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  316.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  317.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  318.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  319.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  320.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  321.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  322.     0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
  323.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  324.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  325.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  326.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  327.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  328.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  329. };
  330.  
  331. BYTE IsGlyph[256] =
  332. {
  333.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  334.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  335.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  336.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  337.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  338.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  339.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  340.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  341.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  342.     0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,
  343.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  344.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  345.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  346.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  347.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  348.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  349. };
  350.  
  351. BYTE CharType[256] =
  352. {
  353.     0,0,0,0,0,0,0,0,0,0,6,0,0,7,0,0,
  354.     0,5,0,4,0,0,0,0,0,0,0,0,0,0,0,0,
  355.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  356.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  357.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  358.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  359.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  360.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  361.     2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,
  362.     0,0,0,0,0,3,1,1,1,1,0,0,0,0,0,0,
  363.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  364.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  365.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  366.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  367.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  368.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  369. };
  370.  
  371.     /* ISO -> IBM font conversion. */
  372.  
  373. UBYTE __far IBMConversion[256] =
  374. {
  375.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,
  376.     0x00,0x11,0x00,0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,
  377.     0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
  378.     0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
  379.     0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
  380.     0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
  381.     0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
  382.     0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
  383.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  384.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  385.     0x00,0xAD,0x9B,0x9C,0x00,0x9D,0x00,0x15,0x00,0x00,0xA6,0x00,0x00,0x00,0xAE,0x00,
  386.     0xF8,0xF1,0xFD,0x00,0x00,0xE6,0x14,0xF9,0x00,0x00,0xA7,0xAF,0xAC,0xAB,0x00,0xA8,
  387.     0x00,0x00,0x00,0x00,0x8E,0x8F,0x92,0x80,0x00,0x90,0x00,0x00,0x00,0x00,0x00,0x00,
  388.     0x00,0xA5,0x00,0x00,0x00,0x00,0x99,0x00,0x00,0x00,0x00,0x00,0x9A,0x00,0x00,0xE1,
  389.     0x85,0xA0,0x83,0x00,0x84,0x86,0x91,0x87,0x8A,0x82,0x88,0x89,0x8D,0xA1,0x8C,0x00,
  390.     0x00,0xA4,0x95,0xA2,0x93,0x00,0x94,0x00,0x00,0x97,0xA3,0x96,0x81,0x00,0x00,0x98
  391. };
  392.  
  393.     /* IBM -> ISO font conversion. */
  394.  
  395. UBYTE __far ISOConversion[256] =
  396. {
  397.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x00,0x00,
  398.     0x00,0x11,0x00,0x13,0xB6,0xA7,0x00,0x00,0x00,0x00,0x00,0x1B,0x00,0x00,0x00,0x00,
  399.     0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
  400.     0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
  401.     0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
  402.     0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
  403.     0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
  404.     0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
  405.     0xC7,0xFC,0xE9,0xE2,0xE4,0xE0,0xE5,0xE7,0xEA,0xEB,0xE8,0x00,0xEE,0xEC,0xC4,0xC5,
  406.     0xC9,0xE6,0xC6,0xF4,0xF6,0xF2,0xFB,0xF9,0xFF,0xD6,0xDC,0xA2,0xA3,0xA5,0x00,0x00,
  407.     0xE1,0xED,0xF3,0xFA,0xF1,0xD1,0xAA,0xBA,0xBF,0x00,0x00,0xBD,0xBC,0xA1,0xAE,0xBB,
  408.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  409.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  410.     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  411.     0x00,0xDF,0x00,0x00,0x00,0x00,0xB5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  412.     0x00,0xB1,0x00,0x00,0x00,0x00,0x00,0x00,0xB0,0xB7,0x00,0x00,0x00,0xB2,0x00,0x00
  413. };
  414.  
  415.     /* Table of graphics characters. */
  416.  
  417. BYTE GfxTable[256] =
  418. {
  419.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  420.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  421.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  422.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  423.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  424.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  425.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  426.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  427.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  428.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  429.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  430.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  431.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  432.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  433.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  434.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  435. };
  436.  
  437.     /* Special character treatment. */
  438.  
  439. struct SpecialKey SpecialKeys[13] =
  440. {
  441.     BEL,    DoBeep,        /* Ring the bell. */
  442.     XON,    DoxON,        /* Flow control - stop output. */
  443.     BKS,    DoBackspace,    /* Erase a character. */
  444.     ENT,    DoLF_FF_VT,    /* Enter key. */
  445.     FFD,    DoFF,        /* Form feed. */
  446.     VTB,    DoLF_FF_VT,    /* Vertical tab (huh?). */
  447.     RET,    DoCR,        /* Return key. */
  448.     TAB,    DoTab,        /* Move to next tab stop. */
  449.     SI,    DoShiftIn,    /* Change to graphics mode */
  450.     SO,    DoShiftOut,    /* Change out of graphics mode. */
  451.     ENQ,    DoEnq,        /* Transmit answerback message. */
  452.     ESC,    DoEsc,        /* Start new control sequence. */
  453.     CSI,    DoCsi        /* Start new control sequence. */
  454. };
  455.  
  456. JUMP *SpecialTable;
  457.  
  458. BYTE AbortMap[256] =
  459. {
  460.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  461.     0,0,0,0,0,0,0,0,1,0,1,2,0,0,0,0,
  462.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  463.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  464.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  465.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  466.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  467.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  468.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  469.     0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,
  470.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  471.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  472.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  473.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  474.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  475.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  476. };
  477.  
  478. JUMP *AbortTable;
  479.  
  480. VOID (*  ConDump)(STRPTR,LONG);
  481. VOID (*  ConOutput)(STRPTR,LONG);
  482. VOID (*  ConProcessData)(register STRPTR,register LONG);
  483.  
  484.     /* Shared global string formatting buffer. */
  485.  
  486. UBYTE __far SharedBuffer[512];
  487.  
  488.     /* Some more handy buffers. */
  489.  
  490. UBYTE __far ARexxCommandBuffer[256],AmigaDOSCommandBuffer[256],DialNumberBuffer[256];
  491.  
  492.     /* Screen pull-down-menu. */
  493.  
  494. struct NewMenu TermMenu[] =
  495. {
  496.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  497.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  498.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_SAVE_AS_PICTURE},
  499.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_SAVE_AS_TEXT},
  500.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  501.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  502.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_SCREEN},
  503.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_SCREEN_AS_GFX},
  504.     {   NM_SUB, NULL,         0 , 0,        0, (APTR)MEN_PRINT_CLIP},
  505.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  506.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)0},
  507.     {   NM_SUB, NULL,         0 , TICK,    0, (APTR)MEN_CAPTURE_TO_FILE},
  508.     {   NM_SUB, NULL,         0 , TICK,    0, (APTR)MEN_CAPTURE_TO_RAW_FILE},
  509.     {   NM_SUB, NULL,         0 , TICK,    0, (APTR)MEN_CAPTURE_TO_PRINTER},
  510.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  511.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_ICONIFY},
  512.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  513.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_ABOUT},
  514.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  515.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_QUIT},
  516.  
  517.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  518.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_COPY},
  519.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PASTE},
  520.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR},
  521.  
  522.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  523.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EXECUTE_DOS_COMMAND},
  524.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EXECUTE_REXX_COMMAND},
  525.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  526.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_RECORD},
  527.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_RECORD_LINE},
  528.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  529.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EDIT_TRAPS},
  530.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_DISABLE_TRAPS},
  531.  
  532.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  533.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PHONEBOOK},
  534.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_REDIAL},
  535.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DIAL_NUMBER},
  536.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  537.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SEND_BREAK},
  538.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_HANG_UP},
  539.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  540.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_WAIT},
  541.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  542.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_FLUSH_BUFFER},
  543.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RELEASE_DEVICE},
  544.  
  545.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  546.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_ASCII},
  547.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_ASCII},
  548.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  549.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_TEXT},
  550.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_TEXT},
  551.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_EDIT_AND_UPLOAD_TEXT},
  552.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  553.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_BINARY},
  554.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DOWNLOAD_BINARY},
  555.  
  556.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  557.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR_BUFFER},
  558.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_DISPLAY_BUFFER},
  559.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLOSE_BUFFER},
  560.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  561.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_FREEZE_BUFFER},
  562.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  563.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_OPEN_BUFFER},
  564.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_BUFFER_AS},
  565.  
  566.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  567.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLEAR_SCREEN},
  568.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_FONT},
  569.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_STYLES},
  570.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RESET_TERMINAL},
  571.  
  572.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  573.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SERIAL},
  574.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MODEM},
  575.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SCREEN},
  576.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TERMINAL},
  577.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SET_EMULATION},
  578.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CLIPBOARD},
  579.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CAPTURE},
  580.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_COMMANDS},
  581.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MISC},
  582.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_PATH},
  583.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSFER_PROTOCOL},
  584.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  585.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSFER},
  586.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_TRANSLATION},
  587.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_MACROS},
  588.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_CURSORKEYS},
  589.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_FAST_MACROS},
  590.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_HOTKEYS},
  591.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SPEECH},
  592.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SOUND},
  593.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_RATES},
  594.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SET_CONSOLE},
  595.     {  NM_ITEM, NM_BARLABEL,     0 , 0,        0, (APTR)0},
  596.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_OPEN_SETTINGS},
  597.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_SETTINGS},
  598.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_SAVE_SETTINGS_AS},
  599.  
  600.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)0},
  601.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_STATUS_WINDOW},
  602.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_REVIEW_WINDOW},
  603.     {  NM_ITEM, NULL,         0 , CHECKIT,    0, (APTR)MEN_PACKET_WINDOW},
  604.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_CHAT_LINE},
  605.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_FAST_MACROS_WINDOW},
  606.     {  NM_ITEM, NULL,         0 , TICK,    0, (APTR)MEN_MATRIX_WINDOW},
  607.     {  NM_ITEM, NULL,         0 , 0,        0, (APTR)MEN_UPLOAD_QUEUE_WINDOW},
  608.  
  609.     { NM_TITLE, NULL,         0 , 0,        0, (APTR)MEN_EXTRA_DIAL},
  610.     {   NM_END, 0,             0 , 0,        0, (APTR)0}
  611. };
  612.  
  613. LONG         NumMenuEntries = sizeof(TermMenu) / sizeof(TermMenu[0]);
  614.  
  615. struct Menu    *Menu;
  616. struct Image    *AmigaGlyph,
  617.         *CheckGlyph;
  618.  
  619. LONG MenuLabels[] =
  620. {
  621.     MSG_TERMDATA_PROJECT_MEN,
  622.     MSG_TERMDATA_SAVE_SCREEN_AS_MEN,
  623.     MSG_TERMDATA_SAVE_AS_PICTURE_MEN,
  624.     MSG_TERMDATA_SAVE_AS_TEXT_MEN,
  625.     MSG_TERMDATA_PRINT_MEN,
  626.     MSG_TERMDATA_PRINT_SCREEN_MEN,
  627.     MSG_TERMDATA_PRINT_SCREEN_GFX_MEN,
  628.     MSG_TERMDATA_PRINT_CLIP_MEN,
  629.     MSG_TERMDATA_CAPTURE_MEN,
  630.     MSG_TERMDATA_CAPTURE_TO_FILE_MEN,
  631.     MSG_TERMDATA_CAPTURE_TO_RAW_FILE_MEN,
  632.     MSG_TERMDATA_CAPTURE_TO_PRINTER_MEN,
  633.     MSG_TERMDATA_ICONIFY_MEN,
  634.     MSG_TERMDATA_ABOUT_MEN,
  635.     MSG_TERMDATA_QUIT_MEN,
  636.  
  637.     MSG_TERMDATA_EDIT_MEN,
  638.     MSG_TERMDATA_COPY_MEN,
  639.     MSG_TERMDATA_PASTE_MEN,
  640.     MSG_TERMDATA_CLEAR_MEN,
  641.  
  642.     MSG_TERMDATA_COMMANDS_MEN,
  643.     MSG_TERMDATA_EXECUTE_DOS_COMMAND_MEN,
  644.     MSG_TERMDATA_EXECUTE_REXX_COMMAND_MEN,
  645.     MSG_TERMDATA_RECORD_MEN,
  646.     MSG_TERMDATA_RECORD_LINE_MEN,
  647.     MSG_TERMDATA_EDIT_TRAPS_MEN,
  648.     MSG_TERMDATA_DISABLE_TRAPS_MEN,
  649.  
  650.     MSG_TERMDATA_PHONE_MEN,
  651.     MSG_TERMDATA_PHONEBOOK_MEN,
  652.     MSG_TERMDATA_REDIAL_MEN,
  653.     MSG_TERMDATA_DIAL_NUMBER_MEN,
  654.     MSG_TERMDATA_SEND_BREAK_MEN,
  655.     MSG_TERMDATA_HANG_UP_MEN,
  656.     MSG_TERMDATA_WAIT_MEN,
  657.     MSG_TERMDATA_FLUSH_BUFFER_MEN,
  658.     MSG_TERMDATA_RELEASE_DEVICE_MEN,
  659.  
  660.     MSG_TERMDATA_XFER_MEN,
  661.     MSG_TERMDATA_UPLOAD_ASCII_MEN,
  662.     MSG_TERMDATA_DOWNLOAD_ASCII_MEN,
  663.     MSG_TERMDATA_UPLOAD_TEXT_MEN,
  664.     MSG_TERMDATA_DOWNLOAD_TEXT_MEN,
  665.     MSG_TERMDATA_EDIT_AND_UPLOAD_TEXT_MEN,
  666.     MSG_TERMDATA_UPLOAD_BINARY_MEN,
  667.     MSG_TERMDATA_DOWNLOAD_BINARY_MEN,
  668.  
  669.     MSG_TERMDATA_BUFFER_MEN,
  670.     MSG_TERMDATA_CLEAR_BUFFER_MEN,
  671.     MSG_TERMDATA_DISPLAY_BUFFER_MEN,
  672.     MSG_TERMDATA_CLOSE_BUFFER_MEN,
  673.     MSG_TERMDATA_FREEZE_BUFFER_MEN,
  674.     MSG_TERMDATA_OPEN_BUFFER_MEN,
  675.     MSG_TERMDATA_SAVE_BUFFER_AS_MEN,
  676.  
  677.     MSG_TERMDATA_SCREEN_MEN,
  678.     MSG_TERMDATA_CLEAR_SCREEN_MEN,
  679.     MSG_TERMDATA_RESET_FONT_MEN,
  680.     MSG_TERMDATA_RESET_STYLES_MEN,
  681.     MSG_TERMDATA_RESET_TERMINAL_MEN,
  682.  
  683.     MSG_TERMDATA_SETTINGS_MEN,
  684.     MSG_TERMDATA_SERIAL_MEN,
  685.     MSG_TERMDATA_MODEM_MEN,
  686.     MSG_TERMDATA_SCREEN_PREFS_MEN,
  687.     MSG_TERMDATA_TERMINAL_MEN,
  688.     MSG_TERMDATA_SET_EMULATION_MEN,
  689.     MSG_TERMDATA_CLIPBOARD_PREFS_MEN,
  690.     MSG_TERMDATA_CAPTURE_PREFS_MEN,
  691.     MSG_TERMDATA_COMMANDS_PREFS_MEN,
  692.     MSG_TERMDATA_MISC_MEN,
  693.     MSG_TERMDATA_PATH_MEN,
  694.     MSG_TERMDATA_TRANSFER_PROTOCOL_MEN,
  695.     MSG_TERMDATA_TRANSFER_MEN,
  696.     MSG_TERMDATA_TRANSLATION_MEN,
  697.     MSG_TERMDATA_MACROS_MEN,
  698.     MSG_TERMDATA_CURSORKEYS_MEN,
  699.     MSG_TERMDATA_FAST_MACROS_MEN,
  700.     MSG_TERMDATA_HOTKEYS_MEN,
  701.     MSG_TERMDATA_SPEECH_MEN,
  702.     MSG_TERMDATA_SOUND_MEN,
  703.     MSG_AREACODES_MEN,
  704.     MSG_TERMDATA_SET_CONSOLE_MEN,
  705.     MSG_TERMDATA_OPEN_SETTINGS_MEN,
  706.     MSG_TERMDATA_SAVE_SETTINGS_MEN,
  707.     MSG_TERMDATA_SAVE_SETTINGS_AS_MEN,
  708.  
  709.     MSG_TERMDATA_WINDOWS_MEN,
  710.     MSG_TERMDATA_STATUS_WINDOW_MEN,
  711.     MSG_TERMDATA_REVIEW_WINDOW_MEN,
  712.     MSG_TERMDATA_PACKET_WINDOW_MEN,
  713.     MSG_TERMDATA_CHAT_LINE_MEN,
  714.     MSG_TERMDATA_FAST_MACROS_WINDOW_MEN,
  715.     MSG_TERMDATA_MATRIX_WINDOW_MEN,
  716.     MSG_TERMDATA_UPLOAD_QUEUE_WINDOW_MEN,
  717.  
  718.     MSG_TERMDATA_DIALING_MEN
  719. };
  720.  
  721.     /* Pointer. */
  722.  
  723. UWORD __chip Stopwatch[(1 + 16 + 1) * 2] =
  724. {
  725.     0x0000,0x0000,
  726.  
  727.     0x0400,0x07C0,
  728.     0x0000,0x07C0,
  729.     0x0100,0x0380,
  730.     0x0000,0x07E0,
  731.     0x07C0,0x1FF8,
  732.     0x1FF0,0x3FEC,
  733.     0x3FF8,0x7FDE,
  734.     0x3FF8,0x7FBE,
  735.     0x7FFC,0xFF7F,
  736.     0x7EFC,0xFFFF,
  737.     0x7FFC,0xFFFF,
  738.     0x3FF8,0x7FFE,
  739.     0x3FF8,0x7FFE,
  740.     0x1FF0,0x3FFC,
  741.     0x07C0,0x1FF8,
  742.     0x0000,0x07E0,
  743.  
  744.     0x0000,0x0000
  745. };
  746.  
  747.     /* Cross-hatch pattern. */
  748.  
  749. ULONG __chip Crosshatch = 0x5555AAAA;
  750.  
  751.     /* Ghosting pattern, slightly different from the cross-hatch pattern. */
  752.  
  753. ULONG __chip Ghosting = 0x44441111;
  754.  
  755.     /* Configuration. */
  756.  
  757. struct Configuration    *Config,
  758.             *PrivateConfig,
  759.             *BackupConfig;
  760. struct SpeechConfig     SpeechConfig;
  761. BYTE             English = TRUE;
  762. BYTE             Status;
  763. BYTE             Online,WasOnline;
  764. ULONG             OnlineMinutes,OnlinePlus;
  765. UWORD             PublicModes;
  766. struct SignalSemaphore     OnlineSemaphore;
  767.  
  768. UBYTE __far         LastConfig[MAX_FILENAME_LENGTH];
  769. UBYTE __far         DefaultPubScreenName[MAXPUBSCREENNAME + 1],
  770.              SomePubScreenName[MAXPUBSCREENNAME + 1];
  771.  
  772.     /* Capture file. */
  773.  
  774. struct Buffer        *FileCapture;
  775. BPTR             PrinterCapture;
  776. UBYTE __far         CaptureName[MAX_FILENAME_LENGTH];
  777. BYTE             StandardPrinterCapture,
  778.              ControllerActive;
  779. LONG             BufferFlushCount;
  780. VOID            (* __regargs CaptureData)(register APTR Data,register LONG Size);
  781. BOOL             RawCapture;
  782.  
  783.     /* Buffer. */
  784.  
  785. UBYTE            **BufferLines;
  786. LONG             Lines;
  787. struct SignalSemaphore    *BufferSemaphore;
  788. LONG             MaxLines = 100;
  789. LONG             BufferSpace;
  790. BYTE             BufferClosed;
  791. BYTE             BufferFrozen;
  792.  
  793. struct MinList         ReviewBufferHistory,
  794.              TextBufferHistory;
  795.  
  796.     /* Sound support.c */
  797.  
  798. struct SoundConfig     SoundConfig;
  799. BYTE             SoundChanged = FALSE;
  800.  
  801.     /* Phonebook. */
  802.  
  803. struct PhoneEntry    **Phonebook;
  804. LONG             PhoneSize;
  805. LONG             NumPhoneEntries;
  806. struct MinList         PhoneGroupList;
  807. ULONG             PhonebookID;
  808. ULONG             PhonebookDefaultGroup;
  809. UBYTE __far         PhonePassword[256];
  810. BYTE             PhonePasswordUsed,
  811.              PhonebookAutoDial,
  812.              PhonebookAutoExit,
  813.              RebuildMenu;
  814. UBYTE __far         Password[100];
  815. UBYTE __far         UserName[100];
  816. UBYTE __far         GlobalPassword[256];
  817.  
  818. UBYTE __far         CurrentBBSName[40],
  819.              CurrentBBSNumber[100],
  820.              CurrentBBSComment[100];
  821.  
  822. UBYTE __far         LastPhone[MAX_FILENAME_LENGTH];
  823. UBYTE __far         LastKeys[MAX_FILENAME_LENGTH];
  824. UBYTE __far         LastMacros[MAX_FILENAME_LENGTH];
  825. UBYTE __far         LastCursorKeys[MAX_FILENAME_LENGTH];
  826. UBYTE __far         LastTranslation[MAX_FILENAME_LENGTH];
  827. UBYTE __far         LastSpeech[MAX_FILENAME_LENGTH];
  828. UBYTE __far         LastSound[MAX_FILENAME_LENGTH];
  829.  
  830. struct MacroKeys    *MacroKeys;
  831. struct CursorKeys    *CursorKeys;
  832.  
  833.     /* Console stuff. */
  834.  
  835. UBYTE            *StripBuffer;
  836. UWORD             LastLine,LastColumn,LastPixel;
  837. UWORD             LastPrintableColumn;
  838. UWORD             LastPrintablePixel;
  839. UWORD             CharCellNominator,CharCellDenominator;
  840. UBYTE             CurrentFontScale,FontScalingRequired,CurrentCharWidth;
  841. UBYTE             Charset,Attributes,FgPen,BgPen;
  842. WORD             CursorX,CursorY,Top,Bottom;
  843. BYTE             UseRegion,RegionSet,InSequence,Quiet,Blocking;
  844. BYTE            *TabStops;
  845. UWORD             TabStopMax;
  846. BYTE             CharMode[2];
  847.  
  848. BOOLEAN             VT52_Mode;
  849.  
  850. BYTE             ResetDisplay,
  851.              DisplayReopened,
  852.              FixPubScreenMode,
  853.              FixScreenSize,
  854.              Apocalypse;
  855.  
  856. struct SignalSemaphore     TerminalSemaphore;    // Protection from shape changers
  857.  
  858.     /* Flow filter. */
  859.  
  860. STRPTR             AttentionBuffers[SCAN_COUNT];
  861. BYTE             BaudPending,FullCheck,UseFlow;
  862. UBYTE             BaudBuffer[80],BaudCount;
  863.  
  864. struct FlowInfo         FlowInfo;
  865.  
  866. STRPTR             DataHold;
  867. LONG             DataSize;
  868.  
  869.     /* Transfer data. */
  870.  
  871. BYTE             BinaryTransfer;
  872. LONG             TransferAbortState;
  873. WORD             TransferAbortCount;
  874. LONG             TransferBits;
  875.  
  876. VOID            (*  ConTransfer)(STRPTR,LONG);
  877.  
  878. UBYTE            *DownloadPath;
  879. BYTE             Uploading;
  880. BYTE             DidTransfer;
  881.  
  882. struct Window        *TransferWindow,
  883.             *TransferPerfWindow;
  884. UBYTE __far         TransferTitleBuffer[256];
  885. BOOLEAN             TransferZoomed = FALSE;
  886. STRPTR             TransferWindowTitle;
  887.  
  888. struct LayoutHandle    *TransferHandle;
  889. struct Menu        *TransferMenu;
  890. struct Gadget        *TransferGadgetArray[GAD_TRANSFER_SKIP + 1];
  891. struct List         TransferInfoList;
  892.  
  893. struct FileTransferInfo    *FileTransferInfo;
  894.  
  895. struct XPR_IO        *XprIO;
  896. UBYTE __far         ProtocolOptsBuffer[256];
  897. BYTE             NewLibrary,NewOptions;
  898. BOOLEAN             XPRCommandSelected;
  899. UBYTE __far         LastXprLibrary[MAX_FILENAME_LENGTH];
  900. UBYTE __far         TransferProtocolName[40];
  901. UBYTE __far         ConvNumber[30],ConvNumber10[30];
  902. BYTE             UsesZModem,SendAbort,TransferAborted,TransferFailed,TransferError;
  903.  
  904. struct Process        *TransferProcess;
  905.  
  906.     /* The standard ZModem cancel sequence
  907.      * (ten CAN chars followed by ten
  908.      * BS chars).
  909.      */
  910.  
  911. UBYTE ZModemCancel[] =
  912. {
  913.     24,24,24,24,24,24,24,24,24,24,
  914.      8, 8, 8, 8, 8, 8, 8, 8, 8, 8
  915. };
  916.  
  917.     /* Pay per minute. */
  918.  
  919. LONG             CurrentPay;
  920. LONG             PayPerUnit[2];
  921. LONG             SecPerUnit[2];
  922. LONG             WhichUnit;
  923. struct PhoneEntry    *ChosenEntry;
  924. BYTE             ChosenInUse;
  925. struct List        *PatternList,
  926.             *ChosenPattern;
  927. UBYTE __far         LastPattern[MAX_FILENAME_LENGTH];
  928. BYTE             PatternsChanged;
  929. struct SignalSemaphore     PatternSemaphore;
  930.  
  931.     /* Execute a command/script. */
  932.  
  933. UBYTE __far         WindowName[256];
  934.  
  935. ULONG             BlockNestCount;
  936. BYTE             WeAreBlocking;
  937.  
  938.     /* Dial list. */
  939.  
  940. struct List        *DialList;
  941. BYTE             SendStartup;
  942. LONG             FirstDialMenu = -1;
  943. struct RexxMsg        *DialMsg;
  944.  
  945.     /* TermMain data. */
  946.  
  947. BYTE             ReleaseSerial;
  948. BYTE             ResetSerial;
  949. BYTE             MainTerminated,
  950.              IconTerminated = TRUE,
  951.              DoIconify = FALSE,
  952.              DoDial = DIAL_IGNORE,
  953.              KeepQuiet;
  954.  
  955. BYTE             ConfigChanged,PhonebookChanged,TranslationChanged,
  956.              MacroChanged,CursorKeysChanged,FastMacrosChanged,
  957.              HotkeysChanged,SpeechChanged,BufferChanged;
  958.  
  959.     /* Upload/Download paths. */
  960.  
  961. UBYTE __far         LastDownload[MAX_FILENAME_LENGTH];
  962. UBYTE __far         LastUpload[MAX_FILENAME_LENGTH];
  963.  
  964.     /* String gadget hooks. */
  965.  
  966. struct Window        *CommandWindow;
  967. struct Gadget        *CommandGadget;
  968.  
  969. BYTE             ClipInput,
  970.              ClipXerox,
  971.              ClipPrefix;
  972.  
  973.     /* Text sending. */
  974.  
  975. UBYTE __far         SendPrompt[256];
  976. LONG             SendPromptLen;
  977. BYTE            (*  SendLine)(register STRPTR,register LONG);
  978.  
  979.     /* Packet window. */
  980.  
  981. struct Window        *PacketWindow;
  982. struct Gadget        *PacketGadgetArray[2];
  983. struct Menu        *PacketMenu;
  984. struct Gadget        *PacketGadgetList;
  985. struct List         PacketHistoryList;
  986.  
  987.     /* Some more colour control flags. */
  988.  
  989. BYTE             Initializing,LoadColours;
  990.  
  991.     /* The character raster. */
  992.  
  993. UBYTE            *Raster,*RasterAttr;
  994. LONG             RasterWidth,RasterHeight;
  995. BYTE             Marking;
  996. struct SignalSemaphore    *RasterSemaphore;
  997. BYTE             RasterEnabled = TRUE;
  998.  
  999.     /* Generic lists. */
  1000.  
  1001. struct GenericList    *GenericListTable[GLIST_COUNT];
  1002.  
  1003.     /* File version test. */
  1004.  
  1005. ULONG VersionProps[2] =
  1006. {
  1007.     ID_TERM,
  1008.     ID_VERS
  1009. };
  1010.  
  1011.     /* Window stack. */
  1012.  
  1013. struct Window        *TopWindow;
  1014.  
  1015. struct Window        *WindowStack[5];
  1016. WORD             WindowStackPtr;
  1017.  
  1018.     /* Global term ID. */
  1019.  
  1020. LONG             TermID;
  1021. UBYTE __far         TermIDString[MAXPUBSCREENNAME + 1];
  1022. UBYTE __far         RexxPortName[256];
  1023.  
  1024.     /* Fast! macros. */
  1025.  
  1026. struct List         FastMacroList;
  1027. LONG             FastMacroCount;
  1028. UBYTE __far         LastFastMacros[MAX_FILENAME_LENGTH];
  1029. struct Window        *FastWindow;
  1030. WORD             FastWindowLeft        = -1,
  1031.              FastWindowTop        = -1,
  1032.              FastWindowHeight    = -1;
  1033.  
  1034.     /* Double-buffered file locking. */
  1035.  
  1036. struct List         DoubleBufferList;
  1037. struct SignalSemaphore     DoubleBufferSemaphore;
  1038.  
  1039.     /* XEM interface. */
  1040.  
  1041. struct XEM_IO        *XEM_IO;
  1042. ULONG             XEM_Signal;
  1043. struct XEmulatorHostData XEM_HostData;
  1044. UBYTE            *OptionTitle;
  1045. struct List         XEM_MacroList;
  1046. struct XEmulatorMacroKey *XEM_MacroKeys;
  1047. UBYTE __far         EmulationName[40];
  1048.  
  1049. struct List         EmptyList;
  1050.  
  1051.     /* Screen scrolling support. */
  1052.  
  1053. UWORD             ScrollLineFirst,ScrollLineLast,
  1054.              ScrollLineCount;
  1055. struct ScrollLineInfo    *ScrollLines;
  1056.  
  1057.     /* term review buffer. */
  1058.  
  1059. struct Window        *ReviewWindow;
  1060.  
  1061.     /* Background information. */
  1062.  
  1063. ULONG             BytesIn,
  1064.              BytesOut;
  1065. struct DateStamp     SessionStart;
  1066. struct Window        *InfoWindow;
  1067.  
  1068.     /* Gadget support routines */
  1069.  
  1070. LONG             InterWidth,
  1071.              InterHeight;
  1072.  
  1073.     /* Character translation. */
  1074.  
  1075. struct TranslationEntry    **SendTable,
  1076.             **ReceiveTable;
  1077.  
  1078.     /* Window alignment information. */
  1079.  
  1080. struct WindowInfo WindowInfoTable[WINDOW_COUNT] =
  1081. {
  1082.     WINDOW_PACKET,    WC_ALIGNBELOW|WC_EXPANDWIDTH,    0,0,0,0,
  1083.     WINDOW_STATUS,    WC_ALIGNRIGHT,            0,0,0,0,
  1084.     WINDOW_FILE,    NULL,                0,0,0,0,
  1085.     WINDOW_REVIEW,    WC_ALIGNTOP|WC_EXPANDWIDTH,    0,0,0,0,
  1086.     WINDOW_FAST,    WC_ALIGNTOP|WC_ALIGNSIDE,    0,0,0,0,
  1087.     WINDOW_FONT,    NULL,                0,0,0,0,
  1088.     WINDOW_SCREEN,    NULL,                0,0,0,0,
  1089.     WINDOW_PERF,    NULL,                0,0,0,0,
  1090.     WINDOW_MAIN,    NULL,                -1,-1,0,0
  1091. };
  1092.  
  1093.     /* New user interface. */
  1094.  
  1095. struct Hook LocaleHook =
  1096. {
  1097.     {NULL},
  1098.     (HOOKFUNC)LocaleHookFunc
  1099. };
  1100.  
  1101.     /* AmigaGuide hook. */
  1102.  
  1103. struct Hook GuideHook =
  1104. {
  1105.     {NULL},
  1106.     (HOOKFUNC)GuideSetupHook
  1107. };
  1108.  
  1109.     /* Special queue management. */
  1110.  
  1111. struct MsgQueue    *SpecialQueue;
  1112.  
  1113.     /* Window and Screen backfill hook. */
  1114.  
  1115. struct Hook BackfillHook =
  1116. {
  1117.     {NULL},
  1118.     (HOOKFUNC)BackfillRoutine
  1119. };
  1120.  
  1121. struct BitMap    BackfillBitMap;
  1122. ULONG        BackfillTag;
  1123.  
  1124.     /* Intercept data going through SerWrite. */
  1125.  
  1126. BOOLEAN (*SerWriteBypass)(STRPTR Buffer,LONG Size);
  1127.  
  1128.     /* The incredibly shrinking file name. */
  1129.  
  1130. UBYTE __far    ShrunkenName[MAX_FILENAME_LENGTH],
  1131.         OriginalName[MAX_FILENAME_LENGTH];
  1132.  
  1133.     /* Terminal emulation task. */
  1134.  
  1135. struct MsgQueue        *TerminalQueue;
  1136.  
  1137.     /* DNet/ParaBIT support. */
  1138. /*
  1139. struct DChannel        *NetChannel;
  1140. struct MsgPort        *NetListen;
  1141. ULONG             NetSigMask;
  1142. BOOLEAN             NetTerminated;
  1143. */
  1144.  
  1145.     /* AppIcon data. */
  1146.  
  1147. STATIC UWORD DropData[304] =
  1148. {
  1149.     0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1150.     0x0000,0x0000,0x2000,0x1000,0x0000,0x0000,0xF000,0x1000,
  1151.     0x0000,0x0001,0x9800,0x1000,0x0000,0x0003,0x1C3E,0x1000,
  1152.     0x0000,0x0003,0xFC30,0x1000,0x0000,0x0000,0x01FF,0x1000,
  1153.     0x0000,0x0000,0x01FC,0x1000,0x0000,0x0060,0x0000,0x1000,
  1154.     0x0000,0x001F,0xFFFF,0xF000,0x0000,0x0000,0x0000,0x0000,
  1155.     0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0700,0x0000,
  1156.     0x07FF,0xFFFE,0x0700,0x0000,0x07FF,0xFFEE,0x0700,0x0000,
  1157.     0x0755,0x555E,0x0700,0x0000,0x07AA,0xAAAE,0x1FC0,0x0000,
  1158.     0x0755,0x555E,0x0F80,0x0000,0x07AA,0xAAAE,0x0700,0x0000,
  1159.     0x0755,0x555E,0x0200,0x0000,0x07AA,0xAAAE,0x0000,0x0000,
  1160.     0x0755,0x555E,0x0000,0x0000,0x07FF,0xFFFE,0x0000,0x0000,
  1161.     0x07FF,0xFFFE,0x0000,0x0000,0x07FF,0xFFFC,0x0000,0x0000,
  1162.     0x0000,0x0000,0x0000,0x0000,0x7FFF,0xFFFF,0xE000,0x0000,
  1163.     0x7FFF,0xFEFF,0xE000,0x0000,0x7FFF,0xFEF0,0x0000,0x0000,
  1164.     0x7FE5,0x54E7,0xFF80,0x0000,0x7FFF,0xFF8E,0x0FC0,0x0000,
  1165.     0x7FFF,0xFFBD,0xFCF0,0x0000,0x0FFF,0xFFFF,0xFEE0,0x0000,
  1166.     0x0FFF,0xFFFB,0xD700,0x0000,0x0000,0x0007,0xAF80,0x0000,
  1167.     0x0000,0x000F,0xFF80,0x0000,0x0000,0x0007,0xFF00,0x0000,
  1168.  
  1169.     0x0000,0x007F,0xFFFE,0x0000,0x0000,0x007F,0xFFFF,0x8000,
  1170.     0x0000,0x0060,0x20FF,0xE000,0x0000,0x0060,0xF0FF,0xE000,
  1171.     0x0000,0x0061,0x98FF,0xE000,0x0000,0x0063,0x1CBF,0xE000,
  1172.     0x0000,0x0063,0xFCB7,0xE000,0x0000,0x007F,0xFDFF,0xE000,
  1173.     0x0000,0x007F,0xFDFF,0xE000,0x0000,0x007F,0xFFFF,0xE000,
  1174.     0x0000,0x001F,0xFFFF,0xE000,0x0000,0x0000,0x0000,0x0000,
  1175.     0x0000,0x0000,0x0000,0x0000,0x07FF,0xFFFC,0x0000,0x0000,
  1176.     0x0FFF,0xFFFC,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1177.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1178.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1179.     0x0F55,0x555C,0x0000,0x0000,0x0EAA,0xAABC,0x0000,0x0000,
  1180.     0x0FFF,0xFFFC,0x0000,0x0000,0x0FFF,0xFFFC,0x0000,0x0000,
  1181.     0x0FFF,0xFFFC,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1182.     0x7FFF,0xFFFF,0xC000,0x0000,0xFFFF,0xFFFF,0xC000,0x0000,
  1183.     0xFFEA,0xABFF,0xC000,0x0000,0xFFE0,0x03FF,0xFF00,0x0000,
  1184.     0xFFFF,0xFFFF,0xFFC0,0x0000,0xFFFF,0xFFFF,0xF9E0,0x0000,
  1185.     0x0000,0x007F,0xFDE0,0x0000,0x1FFF,0xFFC7,0xAF00,0x0000,
  1186.     0x0000,0x0007,0x5F00,0x0000,0x0000,0x000F,0xFF80,0x0000,
  1187.     0x0000,0x001F,0xFF00,0x0000,0x0000,0x0000,0x0000,0x0000
  1188. };
  1189.  
  1190. STATIC struct Image DropImage =
  1191. {
  1192.     0,0,
  1193.     52,38,2,
  1194.     DropData,
  1195.     0x03,0x00,
  1196.     NULL
  1197. };
  1198.  
  1199. struct DiskObject DropIcon =
  1200. {
  1201.     WB_DISKMAGIC,
  1202.     WB_DISKVERSION,
  1203.  
  1204.     NULL,
  1205.     175,18,
  1206.     52,39,
  1207.     0x0005,
  1208.     0x0003,
  1209.     0x0001,
  1210.     &DropImage,
  1211.     NULL,
  1212.     NULL,
  1213.     NULL,
  1214.     NULL,
  1215.     NULL,
  1216.     NULL,
  1217.  
  1218.     WBTOOL,
  1219.     NULL,
  1220.     NULL,
  1221.     NO_ICON_POSITION,
  1222.     NO_ICON_POSITION,
  1223.     NULL,
  1224.     NULL,
  1225.     8192
  1226. };
  1227.  
  1228.     /* Remember some of the incoming data. */
  1229.  
  1230. BOOL    RememberOutput,
  1231.     RememberInput,
  1232.  
  1233.     Recording,
  1234.     RecordingLine;
  1235.  
  1236.     /* Trap settings. */
  1237.  
  1238. BOOLEAN        WatchTraps;
  1239. BOOLEAN        TrapsChanged;
  1240. UBYTE        LastTraps[MAX_FILENAME_LENGTH];
  1241.  
  1242.     /* CR/LF receiver translation data. */
  1243.  
  1244. LONG        (* __regargs Translate_CR_LF)(register STRPTR Data,register LONG Size);
  1245.  
  1246.     /* End of line conversion labels. */
  1247.  
  1248. STRPTR EOL_Labels[] =
  1249. {
  1250.     "-",
  1251.     "«CR»",
  1252.     "«LF»",
  1253.     "«CR»«LF»",
  1254.     "«LF»«CR»",
  1255.  
  1256.     NULL
  1257. };
  1258.  
  1259.  
  1260. /**********************************************************************/
  1261.  
  1262.  
  1263.     /* Character access tables. */
  1264.  
  1265. STATIC UBYTE __far Table0[256] =
  1266. {
  1267.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1268.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1269.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1270.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1271.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1272.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1273.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1274.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1275.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1276.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1277.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1278.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1279.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1280.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1281.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1282.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1283. };
  1284.  
  1285. STATIC UBYTE __far Table1[256] =
  1286. {
  1287.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1288.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1289.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1290.     1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,
  1291.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1292.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1293.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1294.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1295.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1296.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1297.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1298.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1299.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1300.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1301.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1302.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1303. };
  1304.  
  1305. STATIC UBYTE __far Table2[256] =
  1306. {
  1307.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1308.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1309.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1310.     1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,
  1311.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1312.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1313.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1314.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1315.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1316.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1317.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1318.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1319.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1320.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1321.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1322.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1323. };
  1324.  
  1325. STATIC UBYTE __far Table3[256] =
  1326. {
  1327.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1328.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1329.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1330.     1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,
  1331.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1332.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1333.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1334.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1335.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1336.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1337.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1338.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1339.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1340.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1341.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1342.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1343. };
  1344.  
  1345. STATIC UBYTE __far Table4[256] =
  1346. {
  1347.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1348.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1349.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1350.     1,1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,
  1351.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1352.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1353.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1354.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1355.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1356.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1357.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1358.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1359.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1360.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1361.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1362.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1363. };
  1364.  
  1365. STATIC UBYTE __far Table5[256] =
  1366. {
  1367.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1368.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1369.     1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1370.     1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,
  1371.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1372.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1373.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1374.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1375.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1376.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1377.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1378.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1379.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1380.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1381.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1382.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1383. };
  1384.  
  1385. STATIC UBYTE __far Table6[256] =
  1386. {
  1387.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1388.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1389.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1390.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1391.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1392.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1393.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1394.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1395.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1396.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1397.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1398.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1399.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1400.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1401.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1402.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1403. };
  1404.  
  1405. STATIC UBYTE __far Table7[256] =
  1406. {
  1407.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1408.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1409.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1410.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1411.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1412.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1413.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1414.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  1415.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1416.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1417.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1418.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1419.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1420.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1421.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1422.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1423. };
  1424.  
  1425. STATIC UBYTE __far Table8[256] =
  1426. {
  1427.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1428.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1429.     0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,
  1430.     1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,
  1431.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1432.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1433.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1434.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1435.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1436.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1437.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1438.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1439.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1440.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1441.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1442.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1443. };
  1444.  
  1445. STATIC UBYTE __far Term0[256] =
  1446. {
  1447.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1448.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1449.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1450.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1451.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1452.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1453.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1454.     1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,
  1455.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1456.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1457.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1458.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1459.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1460.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1461.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  1462.     0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1463. };
  1464.  
  1465.     /* This follows the control code information. */
  1466.  
  1467. struct ControlCode ANSICode[] =
  1468. {
  1469.     /* Single character sequences */
  1470.  
  1471.     'A',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_CursorUp,    // Cursor up
  1472.     'B',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_CursorDown,    // Cursor down
  1473.     'C',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_CursorRight,    // Cursor right
  1474.     'D',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_CursorLeft,    // Cursor left
  1475.     'F',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // Enter graphics mode
  1476.     'G',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // Exit graphics mode
  1477.     'H',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_CursorHome,    // Cursor to home
  1478.     'I',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_RevLF,    // Reverse line feed
  1479.     'J',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_EraseEOS,    // Erase to end of screen
  1480.     'K',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_EraseEOL,    // Erase to end of line
  1481.     'W',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_PrintOn,    // Enter printer controller mode
  1482.     'X',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_PrintOff,    // Exit printer controller mode
  1483.     ']',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_PrintScreen,    // Print screen
  1484.     'V',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_PrintLine,    // Print cursor line
  1485.     '^',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // Enter auto print mode
  1486.     '_',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // Exit auto print mode
  1487.  
  1488. //    'D',    Table0,    NULL,     0 ,    1,    (EPTR)CursorScrollDown,    // IND
  1489.     'M',    Table0,    NULL,     0 ,    1,    (EPTR)CursorScrollUp,    // RI
  1490.     'E',    Table0,    NULL,     0 ,    1,    (EPTR)NextLine,        // NEL
  1491.     '7',    Table0,    NULL,     0 ,    1,    (EPTR)SaveCursor,    // DECSC
  1492.     '8',    Table0,    NULL,     0 ,    1,    (EPTR)LoadCursor,    // DECRC
  1493.     '=',    Table0,    NULL,     0 ,    1,    (EPTR)NumericAppMode,    // DECPAM
  1494.     '>',    Table0,    NULL,     0 ,    1,    (EPTR)NumericAppMode,    // DECPNM
  1495.     'N',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // SS2
  1496.     'O',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // SS3
  1497. //    'H',    Table0,    NULL,     0 ,    1,    (EPTR)SetTab,        // HTS
  1498.     'P',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // DCS
  1499.     '/',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // ST
  1500.     'Z',    Table0,    NULL,     0 ,    1,    (EPTR)RequestTerminal,    // DECID
  1501.     'c',    Table0,    NULL,     0 ,    1,    (EPTR)Reset,        // RIS
  1502.     '<',    Table0,    NULL,     0 ,    1,    (EPTR)VT52_EnterANSI,    // VT52 "Enter ANSI mode"
  1503.     '~',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // LS1R
  1504.     'n',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // LS2
  1505.     0x7D,    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // LS2R
  1506.     'o',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // LS3
  1507.     '|',    Table0,    NULL,     0 ,    1,    (EPTR)Ignore,        // LS3R
  1508.  
  1509.     /* Double character sequences */
  1510.  
  1511.     '[',    Table0,    NULL,    's',    2,    (EPTR)SaveCursor,
  1512.     '[',    Table0,    NULL,    'u',    2,    (EPTR)LoadCursor,
  1513.  
  1514.     '(',    Table0,    NULL,    'A',    2,    (EPTR)FontStuff,    // SCS
  1515.     '(',    Table0,    NULL,    'B',    2,    (EPTR)FontStuff,    // ASCII font
  1516.     '(',    Table0,    NULL,    '0',    2,    (EPTR)FontStuff,    // DEC special graphics font
  1517.     '(',    Table0,    NULL,    '<',    2,    (EPTR)Ignore,        // DEC supplemental font
  1518.     '(',    Table0,    NULL,    '4',    2,    (EPTR)Ignore,        // Dutch font
  1519.     '(',    Table0,    NULL,    '5',    2,    (EPTR)Ignore,        // Finnish font
  1520.     '(',    Table0,    NULL,    'C',    2,    (EPTR)Ignore,        // Finnish font
  1521.     '(',    Table0,    NULL,    'R',    2,    (EPTR)Ignore,        // French font
  1522.     '(',    Table0,    NULL,    'Q',    2,    (EPTR)Ignore,        // French Canadian font
  1523.     '(',    Table0,    NULL,    'K',    2,    (EPTR)Ignore,        // German font
  1524.     '(',    Table0,    NULL,    'Y',    2,    (EPTR)Ignore,        // Italian font
  1525.     '(',    Table0,    NULL,    '6',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1526.     '(',    Table0,    NULL,    'E',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1527.     '(',    Table0,    NULL,    'Z',    2,    (EPTR)Ignore,        // Spanish font
  1528.     '(',    Table0,    NULL,    '7',    2,    (EPTR)Ignore,        // Swedish font
  1529.     '(',    Table0,    NULL,    'H',    2,    (EPTR)Ignore,        // Swedish font
  1530.     '(',    Table0,    NULL,    '=',    2,    (EPTR)Ignore,        // Swiss font
  1531.  
  1532.     ')',    Table0,    NULL,    'A',    2,    (EPTR)FontStuff,    // SCS
  1533.     ')',    Table0,    NULL,    'B',    2,    (EPTR)FontStuff,    // ASCII font
  1534.     ')',    Table0,    NULL,    '0',    2,    (EPTR)FontStuff,    // DEC special graphics font
  1535.     ')',    Table0,    NULL,    '<',    2,    (EPTR)Ignore,        // DEC supplemental font
  1536.     ')',    Table0,    NULL,    '4',    2,    (EPTR)Ignore,        // Dutch font
  1537.     ')',    Table0,    NULL,    '5',    2,    (EPTR)Ignore,        // Finnish font
  1538.     ')',    Table0,    NULL,    'C',    2,    (EPTR)Ignore,        // Finnish font
  1539.     ')',    Table0,    NULL,    'R',    2,    (EPTR)Ignore,        // French font
  1540.     ')',    Table0,    NULL,    'Q',    2,    (EPTR)Ignore,        // French Canadian font
  1541.     ')',    Table0,    NULL,    'K',    2,    (EPTR)Ignore,        // German font
  1542.     ')',    Table0,    NULL,    'Y',    2,    (EPTR)Ignore,        // Italian font
  1543.     ')',    Table0,    NULL,    '6',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1544.     ')',    Table0,    NULL,    'E',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1545.     ')',    Table0,    NULL,    'Z',    2,    (EPTR)Ignore,        // Spanish font
  1546.     ')',    Table0,    NULL,    '7',    2,    (EPTR)Ignore,        // Swedish font
  1547.     ')',    Table0,    NULL,    'H',    2,    (EPTR)Ignore,        // Swedish font
  1548.     ')',    Table0,    NULL,    '=',    2,    (EPTR)Ignore,        // Swiss font
  1549.  
  1550.     '+',    Table0,    NULL,    'A',    2,    (EPTR)Ignore,        // British font
  1551.     '+',    Table0,    NULL,    'B',    2,    (EPTR)Ignore,        // ASCII font
  1552.     '+',    Table0,    NULL,    '0',    2,    (EPTR)Ignore,        // DEC special graphics font
  1553.     '+',    Table0,    NULL,    '<',    2,    (EPTR)Ignore,        // DEC supplemental font
  1554.     '+',    Table0,    NULL,    '4',    2,    (EPTR)Ignore,        // Dutch font
  1555.     '+',    Table0,    NULL,    '5',    2,    (EPTR)Ignore,        // Finnish font
  1556.     '+',    Table0,    NULL,    'C',    2,    (EPTR)Ignore,        // Finnish font
  1557.     '+',    Table0,    NULL,    'R',    2,    (EPTR)Ignore,        // French font
  1558.     '+',    Table0,    NULL,    'Q',    2,    (EPTR)Ignore,        // French Canadian font
  1559.     '+',    Table0,    NULL,    'K',    2,    (EPTR)Ignore,        // German font
  1560.     '+',    Table0,    NULL,    'Y',    2,    (EPTR)Ignore,        // Italian font
  1561.     '+',    Table0,    NULL,    '6',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1562.     '+',    Table0,    NULL,    'E',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1563.     '+',    Table0,    NULL,    'Z',    2,    (EPTR)Ignore,        // Spanish font
  1564.     '+',    Table0,    NULL,    '7',    2,    (EPTR)Ignore,        // Swedish font
  1565.     '+',    Table0,    NULL,    'H',    2,    (EPTR)Ignore,        // Swedish font
  1566.     '+',    Table0,    NULL,    '=',    2,    (EPTR)Ignore,        // Swiss font
  1567.  
  1568.     '*',    Table0,    NULL,    'A',    2,    (EPTR)Ignore,        // British font
  1569.     '*',    Table0,    NULL,    'B',    2,    (EPTR)Ignore,        // ASCII font
  1570.     '*',    Table0,    NULL,    '0',    2,    (EPTR)Ignore,        // DEC special graphics font
  1571.     '*',    Table0,    NULL,    '<',    2,    (EPTR)Ignore,        // DEC supplemental font
  1572.     '*',    Table0,    NULL,    '4',    2,    (EPTR)Ignore,        // Dutch font
  1573.     '*',    Table0,    NULL,    '5',    2,    (EPTR)Ignore,        // Finnish font
  1574.     '*',    Table0,    NULL,    'C',    2,    (EPTR)Ignore,        // Finnish font
  1575.     '*',    Table0,    NULL,    'R',    2,    (EPTR)Ignore,        // French font
  1576.     '*',    Table0,    NULL,    'Q',    2,    (EPTR)Ignore,        // French Canadian font
  1577.     '*',    Table0,    NULL,    'K',    2,    (EPTR)Ignore,        // German font
  1578.     '*',    Table0,    NULL,    'Y',    2,    (EPTR)Ignore,        // Italian font
  1579.     '*',    Table0,    NULL,    '6',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1580.     '*',    Table0,    NULL,    'E',    2,    (EPTR)Ignore,        // Norwegian/Danish font
  1581.     '*',    Table0,    NULL,    'Z',    2,    (EPTR)Ignore,        // Spanish font
  1582.     '*',    Table0,    NULL,    '7',    2,    (EPTR)Ignore,        // Swedish font
  1583.     '*',    Table0,    NULL,    'H',    2,    (EPTR)Ignore,        // Swedish font
  1584.     '*',    Table0,    NULL,    '=',    2,    (EPTR)Ignore,        // Swiss font
  1585.  
  1586.     '#',    Table0,    NULL,    '3',    2,    (EPTR)ScaleFont,    // DECHDL (top half)
  1587.     '#',    Table0,    NULL,    '4',    2,    (EPTR)ScaleFont,    // DECHDL (bottom half)
  1588.     '#',    Table0,    NULL,    '5',    2,    (EPTR)ScaleFont,    // DECSWL
  1589.     '#',    Table0,    NULL,    '6',    2,    (EPTR)ScaleFont,    // DECDWL
  1590.     '#',    Table0,    NULL,    '8',    2,    (EPTR)AlignmentTest,    // DECALN
  1591.     ' ',    Table0,    NULL,    'F',    2,    (EPTR)Ignore,        // S7C1T
  1592.     ' ',    Table0,    NULL,    'G',    2,    (EPTR)Ignore,        // C8C1T
  1593.  
  1594.     /* Three character sequence */
  1595.  
  1596.     'Y',    Table7,    NULL,     0 ,    3,    (EPTR)VT52_SetCursor,    // Direct cursor address
  1597.  
  1598.     /* Multiple character sequences */
  1599.  
  1600.     '(',    Table6,    Term0,    'D',    0,    (EPTR)Ignore,        // SCS
  1601.  
  1602.     '[',    Table3,    NULL,    'i',    0,    (EPTR)PrinterController,    // Print mode
  1603.  
  1604.     '[',    Table3,    NULL,    'n',    0,    (EPTR)RequestInformation,    // DSR
  1605.     '[',    Table3,    NULL,    'c',    0,    (EPTR)RequestTerminal,    // DA
  1606.     '[',    Table3,    NULL,    'h',    0,    (EPTR)SetSomething,    // Terminal modes
  1607.     '[',    Table3,    NULL,    'l',    0,    (EPTR)SetSomething,    // Terminal modes
  1608.  
  1609.     '[',    Table4,    NULL,    'h',    0,    (EPTR)Ignore,
  1610.     '[',    Table5,    NULL,    'p',    0,    (EPTR)Ignore,        // DECSCL
  1611.  
  1612.     '[',    Table1,    NULL,    'A',    0,    (EPTR)MoveCursor,    // CUU
  1613.     '[',    Table1,    NULL,    'B',    0,    (EPTR)MoveCursor,    // CUD
  1614.     '[',    Table1,    NULL,    'C',    0,    (EPTR)MoveCursor,    // CUF
  1615.     '[',    Table1,    NULL,    'D',    0,    (EPTR)MoveCursor,    // CUB
  1616.     '[',    Table1,    NULL,    'G',    0,    (EPTR)MoveColumn,
  1617.     '[',    Table3,    NULL,    'K',    0,    (EPTR)EraseLine,    // EL/DECSEL
  1618.     '[',    Table3,    NULL,    'J',    0,    (EPTR)EraseScreen,    // ED/DECSED
  1619.     '[',    Table1,    NULL,    'P',    0,    (EPTR)EraseCharacters,    // DCH
  1620.     '[',    Table1,    NULL,    'X',    0,    (EPTR)EraseCharacters,    // ECH (sort of)
  1621.     '[',    Table1,    NULL,    '@',    0,    (EPTR)InsertCharacters,    // ICH
  1622.     '[',    Table1,    NULL,    'L',    0,    (EPTR)InsertLine,    // IL
  1623.     '[',    Table1,    NULL,    'M',    0,    (EPTR)ClearLine,    // DL
  1624.     '[',    Table1,    NULL,    'g',    0,    (EPTR)SetTabs,        // TBC
  1625.     '[',    Table5,    NULL,    'q',    0,    (EPTR)Ignore,        // DECSCA
  1626.  
  1627.     '[',    Table2,    NULL,    'H',    0,    (EPTR)SetAbsolutePosition,    // CUP
  1628.     '[',    Table2,    NULL,    'f',    0,    (EPTR)SetTopPosition,    // HVP
  1629.     '[',    Table2,    NULL,    'm',    0,    (EPTR)SetAttributes,    // SGR
  1630.     '[',    Table2,    NULL,    'y',    0,    (EPTR)Ignore,        // DECTST
  1631.     '[',    Table2,    NULL,    'r',    0,    (EPTR)SetRegion,    // DECSTBM
  1632.  
  1633.     '[',    Table1,    NULL,    'S',    0,    (EPTR)ScrollUp,
  1634.     '[',    Table1,    NULL,    'T',    0,    (EPTR)ScrollDown,
  1635.     '[',    Table1,    NULL,    'E',    0,    (EPTR)MoveCursorDown,
  1636.     '[',    Table1,    NULL,    'F',    0,    (EPTR)MoveCursorUp,
  1637.  
  1638.     '[',    Table8,    NULL,    'z',    0,    (EPTR)Ignore,        // DEC private stuff
  1639.     '[',    Table8,    NULL,    '{',    0,    (EPTR)Ignore        // DEC private stuff
  1640. };
  1641.  
  1642. WORD NumCodes = sizeof(ANSICode) / sizeof(struct ControlCode);
  1643.  
  1644.  
  1645. /**********************************************************************/
  1646.  
  1647.  
  1648. struct SignalSemaphore    ARexxQueueSemaphore;
  1649. struct List        ARexxQueue;
  1650. BOOL            ARexxRunning;
  1651.  
  1652.  
  1653. /**********************************************************************/
  1654.  
  1655.  
  1656. UWORD            PenTable[16];
  1657. UBYTE            TextAttributeTable[16];
  1658. WORD            ForegroundPen,
  1659.             BackgroundPen;
  1660.  
  1661.  
  1662. /**********************************************************************/
  1663.  
  1664.  
  1665. BOOL            ChatMode;
  1666. ULONG            SliderType;
  1667. ULONG            CycleType;
  1668.  
  1669.  
  1670. /**********************************************************************/
  1671.  
  1672.  
  1673. struct ColourTable    *NormalColourTable,
  1674.             *BlinkColourTable,
  1675.             *ANSIColourTable,
  1676.             *EGAColourTable,
  1677.             *DefaultColourTable,
  1678.             *MonoColourTable;
  1679.  
  1680.  
  1681. /**********************************************************************/
  1682.  
  1683.  
  1684. UBYTE             Language[80];
  1685.  
  1686.  
  1687. /**********************************************************************/
  1688.  
  1689.  
  1690. STRPTR CharCodes[256] =
  1691. {
  1692.     "NUL","SOH","STX","ETX","EOT","ENQ","ACK","BEL","BS" ,"HT" ,"LF" ,"VT" ,"FF" ,"CR" ,"SO" ,"SI" ,
  1693.     "DLE","DC1","DC2","DC3","DC4","NAK","SYN","ETB","CAN","EM" ,"SUB","ESC","FS" ,"GS" ,"RS" ,"US" ,
  1694.     "SP" , "!" , "\"", "#" , "$" , "%" , "&" , "'" , "(" , ")" , "*" , "+" , "," , "-" , "." , "/" ,
  1695.      "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , ":" , ";" , "<" , "=" , ">" , "?" ,
  1696.      "@" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" ,
  1697.      "P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "[" , "\\", "]" , "^" , "_" ,
  1698.      "`" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" ,
  1699.      "p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" , "{" , "|" , "}" , "~" ,"DEL",
  1700.     "128","129","130","131","132","133","134","135","136","137","138","139","140","141","SS2","SS3",
  1701.     "DCS","145","146","147","148","149","150","151","152","153","154","CSI","ST" ,"OSC","PM" ,"APC",
  1702.     "NBS", "¡" , "¢" , "£" , "¤" , "¥" , "¦" , "§" , "¨" , "©" , "ª" , "«" , "¬" ,"SHY", "®" , "¯" ,
  1703.      "°" , "±" , "²" , "³" , "´" , "µ" , "¶" , "·" , "¸" , "¹" , "º" , "»" , "¼" , "½" , "¾" , "¿" ,
  1704.      "À" , "Á" , "Â" , "Ã" , "Ä" , "Å" , "Æ" , "Ç" , "È" , "É" , "Ê" , "Ë" , "Ì" , "Í" , "Î" , "Ï" ,
  1705.      "Ð" , "Ñ" , "Ò" , "Ó" , "Ô" , "Õ" , "Ö" , "×" , "Ø" , "Ù" , "Ú" , "Û" , "Ü" , "Ý" , "Þ" , "ß" ,
  1706.      "à" , "á" , "â" , "ã" , "ä" , "å" , "æ" , "ç" , "è" , "é" , "ê" , "ë" , "ì" , "í" , "î" , "ï" ,
  1707.      "ð" , "ñ" , "ò" , "ó" , "ô" , "õ" , "ö" , "÷" , "ø" , "ù" , "ú" , "û" , "ü" , "ý" , "þ" , "ÿ"
  1708. };
  1709.  
  1710.  
  1711. /**********************************************************************/
  1712.  
  1713.  
  1714. struct Window        *MatrixWindow;
  1715.  
  1716.  
  1717. /**********************************************************************/
  1718.  
  1719.  
  1720. VOID            (* __regargs SaveRaster)(WORD First,WORD Last);
  1721.  
  1722.  
  1723. /**********************************************************************/
  1724.  
  1725.  
  1726. struct SignalSemaphore     BufferTaskSemaphore;
  1727. struct TextBufferInfo    *BufferInfoData;
  1728.  
  1729. struct SignalSemaphore     ReviewTaskSemaphore;
  1730. struct TextBufferInfo    *ReviewInfoData;
  1731.